import random
import numpy as np
from collections import Counter
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit import BasicAer, execute
Random number generation using a quantum computer is truly random, it uses superposition principle to generate real random data instead of random-looking periodic sequences.
Using quantum simulator
= 4
n = 512*n trials
= QuantumRegister(n)
q = ClassicalRegister(n)
c = QuantumCircuit(q, c) circuit
for j in range(n):
circuit.h(q[j]) circuit.measure(q,c)
<qiskit.circuit.instructionset.InstructionSet at 0x7fc55d49b310>
'mpl') circuit.draw(
= execute(circuit, BasicAer.get_backend('qasm_simulator'), shots=trials) job
= job.result().get_counts() counts
= {}
count_map for ct in counts:
int(ct,2) ] = counts[ct]/8192
count_map[
from qiskit.tools.visualization import plot_histogram
= (10,5),color=['crimson']) plot_histogram(count_map, figsize
Using classical numpy
They are based on deterministic, predictable algorithms and thus not secure
= 2**n
N = []
rand_lst for _ in range(trials):
0, N)) rand_lst.append(np.random.randint(
= Counter(rand_lst) counter_rand
= {}
counter_rand_prob for key,val in counter_rand.items():
= val/trials counter_rand_prob[key]
= (10, 5), color=['midnightblue']) plot_histogram(counter_rand_prob, figsize
Huh! the distributions seem similar, what’s the hoopla about?
ok, here is a paper on random number generator https://shorturl.at/AFMQZ
They do a bunch of tests:- Restart
- Autocorrelation
- NIST statistical tests